Início

Metadados do artigo aceito para publicação na RSP

  • São disponibilizados os códigos e as bases de dados utilizados no artigo

    • Para verificar os códigos, clique em Code

    • Os códigos estão comentados. Os comentários são precedidos de #

    • Os dados brutos podem acessados no links fornecidos


00. Configurações prévias

  • Carregar pacotes

  • Definir funções

# limpar enviroment
rm(list = ls())

# Desabilitar notação científica
options(scipen = 999)

# Instalar este pacote para quem não o tem
#install.packages("pacman")

pacman::p_load(tidyverse, readxl, janitor, sjPlot, 
               scales, DataExplorer, DT, gridExtra,
               viridis, corrpolot, VGAM, geobr, ggthemes)

Função para carregar as Munics

# A funcao carrega dois objetos: 
# 1 - O dicionário da Munic, contido na primeira aba do excel; 
# 2 - Os dados das Munics contidos em todas as demais abas, unidos por "A1"

carregar_munics <- function(link_da_munic, ano){
  # definir diretório e arquivo temporário
  wd_origin <- getwd()
  temp_dir <- tempdir()
  setwd(temp_dir)
  file.remove(list.files(path = temp_dir))
  temp_file <- tempfile(tmpdir = temp_dir)
  # Criar lista para armazenar arquivos 
  Munic_list <- list()
  # Download da Munic
  download.file(url = link_da_munic, destfile = temp_file)
  # unizip
  unzip(temp_file)
  # remover temporário
  file.remove(temp_file)
  # selecionar o arquivo xls
  file.xls <- list.files(pattern = "xls")
  # Nome da Munic
  Munic <- paste0("Munic_", ano)
  # Carregar todas as abas do excel  
  Munic <- file.xls %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, path = file.xls)
  # remover arquivo xls da pasta temporaria
  file.remove(file.xls)
  # Nome do dicionario
  dic <- paste0("dic_", ano)
  # selecionar dicionário
  dic <- Munic[[1]]
  # excluir dicionário
  Munic[[1]] <- NULL
  # Mesclar todas as abas do excel
  Munic <- Munic %>% 
      reduce(full_join, by = "A1")
  # Criar nome da lista 
  list <- paste0("list_", Munic)
  # criar lista com dicionário e Munic
  list <- list(dic, Munic)
  # retornar ao diretório orginal
  setwd(wd_origin)
  # retornar objeto list com dicionário e Munics
  return(list)
}

01. Carregar dados

Munic 2014
  • dados da saúde
  • educação
  • total de servidores do município (com graduação e pós-graduação)
Munic 2013 - Bloco Suplementar
  • dados da assistencia social
Munic 2015
  • dados dos consórcios nas três áreas (saúde, educ. e assist. social)
Pib
  • ano: 2014
IDH-M
  • ano: 2010
########################################
# Munic 2014
Munic_14_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2014/base_MUNIC_xls_2014.zip"

Munic_14 <- carregar_munics(link_da_munic = Munic_14_link,
                            ano = 2014)

Munic_dic_14 <- Munic_14[[1]]

Munic_14 <- Munic_14[[2]]

########################################
# Munic 2013 - Suplementar
Munic_13sup_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/Assistencia_Social_2013/xls/base_assist_social_2013.zip"

Munic_13 <- carregar_munics(link_da_munic = Munic_13sup_link,
                            ano = 2013)

Munic_dic_13 <- Munic_13[[1]]

Munic_13 <- Munic_13[[2]]

########################################
# Munic 2015
Munic_15_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2015/Base_de_Dados/Base_MUNIC_2015_xls.zip"

Munic_15 <- carregar_munics(link_da_munic = Munic_15_link,
                            ano = 2015)

Munic_dic_15 <- Munic_15[[1]]

Munic_15 <- Munic_15[[2]]

########################################
# Pib   
pib_link <- "ftp://ftp.ibge.gov.br/Pib_Municipios/2017/base/base_de_dados_2010_2017_xls.zip"
temp_dir <- tempdir()
#
temp_file2 <- tempfile(tmpdir = temp_dir)
# download
download.file(url = pib_link, destfile = temp_file2)
#unzip
unzip(temp_file2)
# selecionar arquivo
file.xls <- list.files(pattern = "xls")

pib <- rio::import(file.xls)
file.remove(file.xls)

########################################    
# Carregar dados do idh-m
idhm_link <- "http://atlasbrasil.org.br/2013/data/rawData/atlas2013_dadosbrutos_pt.xlsx"

idhm <- rio::import(idhm_link, sheet = 2)
#idhm <- read_excel("idh_census.xlsx", sheet = 2)   

########################################    
# base de códigos IBGE
#cod <- read_excel("codigos.xlsx") %>% 
#      dplyr::select(1:2)
  ##### Not run
# Uso particular para configurações no computador pessoal 
setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data.RData")
load("capacities_raw_data.RData")

Selecionar dados

###########################################
# Munic 2014 - saúde e educação
index_14 <- c("A263", # Conselho de Saúde
              "A271", # Fundo de Saúde
              "A273", # Plano de Saúde
              "A251", # Secretaria de Saúde
              "A256", # Servidores da Saúde
              "A207", # Conselho de Educação
              "A224", # Conselho do Fundeb, proxy para o fundo
              "A203", # Plano de Educação
              "A157", # Secretaria de Educação
              "A167", # Servidores da Educação
              #"A392", # Secretaria Direitos Humanos
              #"A545", # Fundo Direitos Humanos
              #"A410", # Plano Direitos Humanos
              #"A442",  # Conselho Direitos Humanos
              "A2",   # Total de servidores do Municipio 
              "A12", # Total com ensino Superior
              "A13") # Total com pós-graduação

Munic_14_sel <- Munic_14 %>% 
  dplyr::select(A1, 
                A1022:A1029, # região, população e porte
                index_14)
###########################################    
#Munic 2013 - Assistência Social
    index_13 <- c("A1", 
                  "A199", # Conselho da Assit. Social
                  "A230", # Fundo da Assist. Social
                  "A149", # Plano da Assist. Social
                  "A2", # Secretaria de Assist. Social
                  "A39") # Servidores da Assist. Social
    
    Munic_13_sel <- Munic_13 %>% 
      dplyr::select(index_13) 
###########################################    
# Munic 2015 - consórcios
    index_15 <- c("A1", 
                  "A151", # Consórcio de Educação
                  "A152", # Intermunicipal
                  "A153", # Estadual
                  "A154", # Federal
                  "A155", # Consórcio de Saúde
                  "A156", # Intermunicipal
                  "A157", # Estadual
                  "A158", # Federal
                  "A159", # Consórcio de Assist. Social
                  "A160", # Intermunicipal
                  "A161", # Estadual
                  "A162") # Federal

    Munic_15_sel <- Munic_15 %>% 
      dplyr::select(index_15)

###########################################        
# PIB - 2014
    pib <- clean_names(pib)
    pib_sel <- pib %>% #glimpse()
      filter(ano == 2014) %>% 
      select(A1 = codigo_do_municipio, ano, 
             pib_total = produto_interno_bruto_a_precos_correntes_r_1_000,
             pib_per_cap = produto_interno_bruto_per_capita_a_precos_correntes_r_1_00)%>%
      arrange(desc(pib_per_cap))
    
###########################################                
# IDH-M - 2010
    idhm_sel <- idhm %>% 
      dplyr::select(A1 = Codmun7, ANO, IDHM) %>% 
      filter(ANO==2010) %>% 
      arrange(desc(IDHM))

Mesclar bases

# garantir que os códigos são caracter
Munic_13_sel$A1 <- as.character(Munic_13_sel$A1)
Munic_15_sel$A1 <- as.character(Munic_15_sel$A1)
Munic_14_sel$A1 <- as.character(Munic_14_sel$A1)
pib_sel$A1 <- as.character(pib_sel$A1)
idhm_sel$A1 <- as.character(idhm_sel$A1)

# Criar variavel com código de 6 digitos para mesclar com a Munic 2013 e mesclar todas as Munics
capacities <- Munic_14_sel %>% 
  mutate(A1a = str_sub(A1,start = 1, end = 6)) %>% 
  select(A1, A1a, everything()) %>% 
  full_join(Munic_13_sel, by = c("A1a"="A1")) %>% 
  full_join(Munic_15_sel, by = c("A1"="A1"))

# Mesclar pib e idhm
capacities <- capacities %>% 
  full_join(pib_sel) %>% 
  full_join(idhm_sel)

Visualização parcial do banco

  • Apenas 10 primeiras linhas
  • Nomes das variáveis tais quais originais
capacities %>% head(10)

Organizar e renomenar variáveis

capacities <- capacities %>% 
  select(cod_mun = A1,
         nm_mun = A1027,
         populacao = A1028,
         faixa_pop = A1029,
         cod_est = A1022,
         nm_est = A1025,
         sg_est = A1026,
         regiao = A1024,
         # Secretarias
         sc_sa = A251,  
         sc_as = A2.y,  
         sc_ed = A157.x,
         # Planos
         pl_sa = A273,  
         pl_as = A149,  
         pl_ed = A203,  
         # Fundos
         fu_sa = A271,  
         fu_as = A230,  
         fu_ed = A224,  
         # Conselhos
         chl_sa = A263, 
         chl_as = A199, 
         chl_ed = A207, 
         # Servidores
         ser_sa = A256, 
         ser_as = A39,  
         ser_ed = A167,
         # Consórciso
         consor_ed = A151,
         #consor_ed_mun = A152 ,
         #consor_ed_est = A153,
         #consor_ed_un =  A154,
          consor_sa = A155,
         #consor_sa_mun = A156,
         #consor_sa_est = A157.y,
         #consor_sa_un =  A158,
          consor_as = A159,
         #consor_as_mun = A160,
         #consor_as_est = A161,
         #consor_as_un =  A162,
         pib_total = pib_total,
         pib_per_cap = pib_per_cap, 
         ano_pib = ano,
         idhm = IDHM,
         ano_idhm = ANO)

Verificar e remover NA’s

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities)

# NA - presentes apenas nos IDHM
# Excluir NA's
# Removidos 5 municipios não criados até 2010, portante sem o IDHM para esse ano.
capacities <- capacities %>% 
  drop_na(idhm)

DataExplorer::plot_missing(capacities)

Nova base 1

  • Criada para preservar os dados brutos em caso de reutilização
capacities_1 <- capacities

02. Visualizar dados brutos

Podem ser baixados em formato excel ou csv

  • Legenda:

    • cod_mun = código do município
    • nm_mun = nome do município
    • cod_est = código do estado
    • nm_est = nome do estado
    • sg_est = sigla do estado
    • populacao = população do município
    • faixa_pop = classificação da faixa populacional (IBGE)
    • sc_ = secretaria exclusiva (sa = saúde; ed = educação; as = assistência social)
    • pl_ = plano setorial (sa = saúde; ed = educação; as = assistência social)
    • fu_ = fundo setorial (sa = saúde; ed = educação; as = assistência social)
    • chl_ = conselho setorial (sa = saúde; ed = educação; as = assistência social)
    • ser_ = servidores setoriais (sa = saúde; ed = educação; as = assistência social)
    • consor_ = consórcios setoriais (sa = saúde; ed = educação; as = assistência social)
    • pib_total = Pib total do município
    • pib_per_cap = Pib per capta do município
    • ano_pib = Ano de referência do Pib
    • idhm = IDHM do município
    • ano_idhm = Ano de referência do IDHM
capacities_1 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

03. Manipulação

Not run
# Uso particular para configurações de uso pessoal
# setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
# save.image("capacities_raw_data.RData")
# load("capacities_raw_data.RData")

Filtrar munincípios

  • com menos de 50.000 habitantes

De 5.565 mun. passamos a trabalhar com 4.917 (88%)

capacities_2 <- capacities_1 %>% 
  filter(populacao <= 50000) %>% 
  mutate(faixa_pop = faixa_pop %>% as.factor())
# Not run
# capacities_2$faixa_pop

Classificação variáveis

character_col <- c("cod_mun", "nm_mun")

factor_col <- c("cod_est", "nm_est", "sg_est","faixa_pop", "regiao", "sc_sa", "sc_as", "sc_ed", "pl_sa", "pl_as", "pl_ed", "fu_sa", "fu_as", "fu_ed", "chl_sa", "chl_as", "chl_ed", "consor_ed", "consor_ed", "consor_sa", "consor_as") 

numeric_col <- c("populacao", "ser_sa", "ser_as", "ser_ed", "pib_total", "pib_per_cap", "ano_pib", "idhm","ano_idhm")

capacities_2 <- capacities_2 %>% 
  mutate_at(character_col, as.character) %>% 
  mutate_at(factor_col, as.factor) %>% 
  mutate_at(numeric_col, as.numeric)

Sumário das variáveis

  • Numéricas: valores mínimos, máximos, média, mediana etc.

  • Categóricas: categorias e quantidade de cada uma

  • Character: quantidade de valores únicos

capacities_2 <- as_tibble(capacities_2)

summary(capacities_2)
##    cod_mun             nm_mun            populacao    
##  Length:4917        Length:4917        Min.   :  822  
##  Class :character   Class :character   1st Qu.: 4967  
##  Mode  :character   Mode  :character   Median :10008  
##                                        Mean   :13312  
##                                        3rd Qu.:18595  
##                                        Max.   :49963  
##                                                       
##                faixa_pop       cod_est                   nm_est    
##  1 - Até 5000       :1242   31     : 785   Minas Gerais     : 785  
##  2 - 5001 até 10000 :1214   35     : 512   São Paulo        : 512  
##  3 - 10001 até 20000:1381   43     : 453   Rio Grande do Sul: 453  
##  4 - 20001 até 50000:1080   29     : 370   Bahia            : 370  
##                             41     : 364   Paraná           : 364  
##                             42     : 265   Santa Catarina   : 265  
##                             (Other):2168   (Other)          :2168  
##      sg_est                  regiao    
##  MG     : 785   1 - Norte       : 379  
##  SP     : 512   2 - Nordeste    :1611  
##  RS     : 453   3 - Sudeste     :1419  
##  BA     : 370   4 - Sul         :1082  
##  PR     : 364   5 - Centro-Oeste: 426  
##  SC     : 265                          
##  (Other):2168                          
##                                                    sc_sa     
##  Não informado                                        :   2  
##  Órgão da administração indireta                      :   4  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 366  
##  Secretaria municipal exclusiva                       :4417  
##  Setor subordinado a outra secretaria                 :  10  
##  Setor subordinado diretamente à chefia do Executivo  : 117  
##                                                    sc_as     
##  Fundação pública                                     :   3  
##  Não possui estrutura                                 :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 963  
##  Secretaria municipal exclusiva                       :3727  
##  Setor subordinado a outra secretaria                 :  82  
##  Setor subordinado diretamente à chefia do Executivo  : 139  
##                                                    sc_ed     
##  Não informado                                        :   1  
##  Órgão da administração indireta                      :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas:1983  
##  Secretaria municipal exclusiva                       :2751  
##  Setor subordinado à outra secretaria                 :   9  
##  Setor subordinado diretamente à chefia do Executivo  : 170  
##            pl_sa         pl_as                pl_ed                fu_sa     
##  Não          : 122   Não   : 286   Não          :2852   Não          :   4  
##  Não informado:   3   Recusa:   1   Não informado:   3   Não informado:   3  
##  Recusa       :   1   Sim   :4630   Recusa       :   1   Recusa       :   1  
##  Sim          :4791                 Sim          :2061   Sim          :4909  
##                                                                              
##                                                                              
##                                                                              
##     fu_as                fu_ed                chl_sa        chl_as    
##  Não   :  31   Não          :  72   Não          :  10   Não   :   5  
##  Recusa:   1   Não informado:   3   Não informado:   2   Recusa:   1  
##  Sim   :4885   Recusa       :   1   Recusa       :   1   Sim   :4911  
##                Sim          :4841   Sim          :4904                
##                                                                       
##                                                                       
##                                                                       
##            chl_ed         ser_sa           ser_as            ser_ed      
##  Não          : 666   Min.   :   1.0   Min.   :  0.000   Min.   :   0.0  
##  Não informado:   3   1st Qu.:  61.0   1st Qu.:  2.000   1st Qu.:  94.0  
##  Recusa       :   1   Median : 100.0   Median :  5.000   Median : 179.0  
##  Sim          :4247   Mean   : 135.7   Mean   :  8.559   Mean   : 267.4  
##                       3rd Qu.: 179.0   3rd Qu.: 11.000   3rd Qu.: 364.0  
##                       Max.   :1253.0   Max.   :180.000   Max.   :2460.0  
##                       NA's   :50       NA's   :11        NA's   :29      
##          consor_ed            consor_sa            consor_as   
##  Não          :4594   Não          :2396   Não          :4513  
##  Não informado:   1   Não informado:   1   Não informado:   1  
##  Recusa       :   1   Recusa       :   1   Recusa       :   1  
##  Sim          : 321   Sim          :2519   Sim          : 402  
##                                                                
##                                                                
##                                                                
##    pib_total         pib_per_cap        ano_pib          idhm       
##  Min.   :   11715   Min.   :  3082   Min.   :2014   Min.   :0.4180  
##  1st Qu.:   58829   1st Qu.:  7491   1st Qu.:2014   1st Qu.:0.5940  
##  Median :  119973   Median : 12951   Median :2014   Median :0.6570  
##  Mean   :  238100   Mean   : 17625   Mean   :2014   Mean   :0.6521  
##  3rd Qu.:  251339   3rd Qu.: 21434   3rd Qu.:2014   3rd Qu.:0.7100  
##  Max.   :11915834   Max.   :815698   Max.   :2014   Max.   :0.8540  
##                                                                     
##     ano_idhm   
##  Min.   :2010  
##  1st Qu.:2010  
##  Median :2010  
##  Mean   :2010  
##  3rd Qu.:2010  
##  Max.   :2010  
## 

Filtrar casos com “recusa”

2 mun. (cod_mun: 2102150 e 4110508) recusou-se a responder todas as questões

# Filtrar 1 municipio com recusa para todas as variáveis
capacities_2 <- filter(capacities_2, sc_sa != "Recusa")
capacities_2 <- filter(capacities_2, consor_as != "Recusa")

Transf. sec. exclusivas em dummies

Operação em dois passos

  • O primeiro aplicado somente às secretarias
  • O segundo a todas as variáveis com respostas “Sim”
# verificar labels
unique(capacities_2$sc_sa)
## [1] Secretaria municipal exclusiva                       
## [2] Setor subordinado diretamente à chefia do Executivo  
## [3] Secretaria municipal em conjunto com outras políticas
## [4] Setor subordinado a outra secretaria                 
## [5] Recusa                                               
## [6] Não informado                                        
## [7] Órgão da administração indireta                      
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_ed)
## [1] Secretaria municipal exclusiva                       
## [2] Secretaria municipal em conjunto com outras políticas
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Órgão da administração indireta                      
## [5] Setor subordinado à outra secretaria                 
## [6] Recusa                                               
## [7] Não informado                                        
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_as)
## [1] Secretaria municipal em conjunto com outras políticas
## [2] Secretaria municipal exclusiva                       
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Setor subordinado a outra secretaria                 
## [5] Recusa                                               
## [6] Fundação pública                                     
## [7] Não possui estrutura                                 
## 7 Levels: Fundação pública Não possui estrutura ... Setor subordinado diretamente à chefia do Executivo

1º passo

  • Transformar Secretaria municipal exclusiva = Sim

  • Outras modalidades = Não

# Transformar Secretaria exclusiva = Sim.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(sc_sa:sc_ed), 
            funs(ifelse(.=="Secretaria municipal exclusiva", "Sim","Não"))) 

Verificar aplicação

quantidades e porcentagens por setor

capacities_2 %>% 
  count(sc_sa, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_as, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_ed, name = "quantidade") %>%
  mutate(perc = quantidade/sum(quantidade)*100)

2º passo

  • Transformar todas as respostas “Sim” = 1;

  • Todas demais = 0

  • Depois, realizar a contagem de “Sim” e classificar

Secretarias

  • realizar contagem de “Sim” e categorizar
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(sc_sa:sc_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_sc = rowSums(select(.,sc_sa:sc_ed))) %>% 
    relocate(Num_sc, .after = sc_ed)

# Verificar 
capacities_2 %>% 
  count(Num_sc, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
# Categorizar quantidade de secretarias
capacities_2 <- capacities_2 %>% 
  mutate(Sc_class = case_when(
    Num_sc == 3 ~ "Possui 3",
    Num_sc == 2 ~ "Possui 2",
    Num_sc == 1 ~ "Possui 1",
    Num_sc == 0 ~ "Não possui")) %>% 
    relocate(Sc_class, .after = Num_sc)

levels_cat <- c("Não possui" ,"Possui 1", "Possui 2","Possui 3")

capacities_2$Sc_class <- ordered(capacities_2$Sc_class, 
               levels = c(levels_cat))

Planos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$pl_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$pl_sa)
## [1] "Sim"           "Não"           "Recusa"        "Não informado"
unique(capacities_1$pl_ed)
## [1] "Sim"           "Não"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(pl_sa:pl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_pl = rowSums(select(.,pl_sa:pl_ed)))%>% 
  relocate(Num_pl, .after = pl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
  mutate(Pl_class = case_when(
    Num_pl == 3 ~ "Possui 3",
    Num_pl == 2 ~ "Possui 2",
    Num_pl == 1 ~ "Possui 1",
    Num_pl == 0 ~ "Não possui")) %>% 
    relocate(Pl_class, .after = Num_pl)

capacities_2$Pl_class <- ordered(capacities_2$Pl_class, 
               levels = c(levels_cat))

Fundos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$fu_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$fu_sa)
## [1] "Sim"           "Recusa"        "Não informado" "Não"
unique(capacities_1$fu_ed)
## [1] "Sim"           "Não"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(fu_sa:fu_ed), funs(ifelse(.== "Sim", 1, 0))) 

  # Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_fu = rowSums(select(.,fu_sa:fu_ed)))%>% 
    relocate(Num_fu, .after = fu_ed) 
  
# Categorizar quantidade de fundos
capacities_2 <- capacities_2 %>% 
  mutate(Fu_class = case_when(
    Num_fu == 3 ~ "Possui 3",
    Num_fu == 2 ~ "Possui 2",
    Num_fu == 1 ~ "Possui 1",
    Num_fu == 0 ~ "Não possui")) %>% 
    relocate(Fu_class, .after = Num_fu)

capacities_2$Fu_class <- ordered(capacities_2$Fu_class, 
               levels = c(levels_cat))

Conselhos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$chl_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$chl_sa)
## [1] "Sim"           "Não"           "Recusa"        "Não informado"
unique(capacities_1$chl_ed)
## [1] "Não"           "Sim"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(chl_sa:chl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_chl = rowSums(select(.,chl_sa:chl_ed)))%>% 
  relocate(Num_chl, .after = chl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Chl_class = case_when(
    Num_chl == 3 ~ "Possui 3",
    Num_chl == 2 ~ "Possui 2",
    Num_chl == 1 ~ "Possui 1",
    Num_chl == 0 ~ "Não possui")) %>% 
    relocate(Chl_class, .after = Num_chl)

capacities_2$Chl_class <- ordered(capacities_2$Chl_class, 
               levels = c(levels_cat))

Consórcios

  • realizar contagem de “Sim” e categorizar
# Assistência Social
levels(capacities_2$consor_as)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
levels(capacities_2$consor_ed)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
levels(capacities_2$consor_sa)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(consor_ed:consor_as), 
            funs(ifelse(.== "Sim", 1, 0)))

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_consor = rowSums(select(.,consor_ed:consor_as)))%>% 
  relocate(Num_consor, .after = consor_as)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Consor_class = case_when(
    Num_consor == 3 ~ "Possui 3",
    Num_consor == 2 ~ "Possui 2",
    Num_consor == 1 ~ "Possui 1",
    Num_consor == 0 ~ "Não possui")) %>% 
    relocate(Consor_class, .after = Num_consor)

capacities_2$Consor_class <- ordered(capacities_2$Consor_class, 
               levels = c(levels_cat))

Servidores

  • calcular proporção de servidores por 10.000 habitantes
capacities_2 <- capacities_2 %>%
  mutate(ser_sa_pop = ser_sa*10000/populacao,
              ser_ed_pop = ser_ed*10000/populacao,
              ser_as_pop = ser_as*10000/populacao,
              total_ser_por_10mil_hab = ser_sa_pop + ser_ed_pop + ser_as_pop,
              total_ser_por_10mil_hab = round(total_ser_por_10mil_hab)) %>% 
  relocate(ser_sa:ser_ed, .after = Consor_class ) %>% 
  relocate(ser_sa_pop:total_ser_por_10mil_hab, .after = ser_ed)

IDHM

#Verificar quantiles 
quantile(capacities_2$idhm)
##    0%   25%   50%   75%  100% 
## 0.418 0.594 0.657 0.710 0.854
min(capacities_2$idhm)
## [1] 0.418
max(capacities_2$idhm) 
## [1] 0.854
#  0%   25%   50%   75%  100% 
# 0.418 0.594 0.657 0.710 0.854 

Categorizar IDHM

capacities_2 <- capacities_2 %>% 
  mutate(idhm_quintil = case_when(
    idhm <= 0.418 ~ "primeiro",
    idhm >= 0.419 & idhm <= 0.594 ~ "segundo",
    idhm >= 0.595 & idhm <= 0.657 ~ "terceiro",
    idhm >= 0.658 & idhm <= 0.710 ~ "quarto",
    idhm >= 0.711 ~ "quinto"))
    

levels_idhm = c("primeiro", "segundo", "terceiro", "quarto", "quinto")

capacities_2$idhm_quintil <- ordered(capacities_2$idhm_quintil, 
               levels = c(levels_idhm))

Nova base 2

Criada para preservar os dados brutos em caso de reutilização

capacities_3 <- capacities_2

04. Visualizar dados manipulados

capacities_3 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

Verificar e remover NA’s

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities_3)

# NA - presentes apenas na quantidade de servidores
# 1,46% dos casos está com NA. Excluindo esses, o número de municípios decai para 4.844 (86% do total)

capacities_3 <- capacities_3 %>% 
  drop_na(total_ser_por_10mil_hab)

DataExplorer::plot_missing(capacities_3)

Not run
# Uso particular para configurações
setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_3.RData")
#load("capacities_raw_data_3.RData")

05. Regressões

capacities_4 <- capacities_3
  • Rodadas com a função vglm, do pacote ‘VGAM’, e os argumentos family = cumulative(parallel = T, reverse = T)

No artigo foram reportadas apenas a coluna intercept e o p-value

Brasil

  • 4.844 casos
olr_brasil <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = capacities_4, family = cumulative(parallel = T, reverse = T))

summary(olr_brasil)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = capacities_4)
## 
## Pearson residuals:
##                        Min        1Q    Median       3Q      Max
## logitlink(P[Y>=2])  -39.89  0.002594  0.006031  0.01557  0.06668
## logitlink(P[Y>=3])  -42.78  0.008293  0.113751  0.41665 38.99648
## logitlink(P[Y>=4]) -412.20 -0.405759  0.032265  0.41417  4.56583
## logitlink(P[Y>=5])  -38.24 -0.431457 -0.101732 -0.03033  7.60692
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -18.8453973   1.3230257 -14.244 < 0.0000000000000002
## (Intercept):2           -26.9801522   0.8476291 -31.830 < 0.0000000000000002
## (Intercept):3           -29.0622963   0.8635502 -33.654 < 0.0000000000000002
## (Intercept):4           -31.1357760   0.8803494 -35.368 < 0.0000000000000002
## log(pib_per_cap)          2.9991031   0.0649575  46.170 < 0.0000000000000002
## Num_sc                   -0.1921662   0.0359656  -5.343         0.0000000914
## Num_pl                    0.2891329   0.0516971   5.593         0.0000000223
## Num_fu                   -0.0158319   0.1876479  -0.084                0.933
## Num_chl                   0.4699347   0.0844157   5.567         0.0000000259
## total_ser_por_10mil_hab  -0.0032277   0.0002291 -14.086 < 0.0000000000000002
## Num_consor                0.2128708   0.0388176   5.484         0.0000000416
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## (Intercept):4           ***
## log(pib_per_cap)        ***
## Num_sc                  ***
## Num_pl                  ***
## Num_fu                     
## Num_chl                 ***
## total_ser_por_10mil_hab ***
## Num_consor              ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 9526.135 on 19365 degrees of freedom
## 
## Log-likelihood: -4763.068 on 19365 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              20.0675294               0.8251697               1.3352692 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.9842928               1.5998896               0.9967775 
##              Num_consor 
##               1.2372248

Norte

  • 368 casos
norte <- capacities_4 %>% 
  filter(regiao == "1 - Norte")

olr_norte <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = norte, family = cumulative(parallel = T, reverse = T))

summary(olr_norte)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = norte)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -11.6937  0.02193  0.03387  0.05783 0.1616
## logitlink(P[Y>=3])  -8.4486 -0.63428  0.25762  0.66895 2.8873
## logitlink(P[Y>=4])  -5.5986 -0.47224 -0.20576 -0.10789 4.4049
## logitlink(P[Y>=5])  -0.9945 -0.07732 -0.04386 -0.02527 7.3799
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -18.9932222   3.0281403  -6.272       0.000000000356
## (Intercept):2           -25.2462495   2.9201318  -8.646 < 0.0000000000000002
## (Intercept):3           -27.7822999   2.9885544  -9.296 < 0.0000000000000002
## (Intercept):4           -31.7157388   3.2078216  -9.887 < 0.0000000000000002
## log(pib_per_cap)          2.8119468   0.2863868   9.819 < 0.0000000000000002
## Num_sc                   -0.2261491   0.1562388  -1.447               0.1478
## Num_pl                    0.2758593   0.1983776   1.391               0.1644
## Num_fu                   -0.3657436   0.4534940  -0.807               0.4200
## Num_chl                   0.4201605   0.2369968   1.773               0.0763
## total_ser_por_10mil_hab  -0.0013005   0.0007617  -1.707               0.0878
## Num_consor               -0.1338285   0.1663035  -0.805               0.4210
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## (Intercept):4           ***
## log(pib_per_cap)        ***
## Num_sc                     
## Num_pl                     
## Num_fu                     
## Num_chl                 .  
## total_ser_por_10mil_hab .  
## Num_consor                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 650.6922 on 1461 degrees of freedom
## 
## Log-likelihood: -325.3461 on 1461 degrees of freedom
## 
## Number of Fisher scoring iterations: 6 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):4'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              16.6422866               0.7975992               1.3176625 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.6936807               1.5222058               0.9987004 
##              Num_consor 
##               0.8747401

Nordeste

  • 1.574 casos
nordeste <- capacities_4 %>% 
  filter(regiao == "2 - Nordeste")

olr_nordeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_nordeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440  1.03456  3.571
## logitlink(P[Y>=3])  -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4])  -0.2412 -0.02037 -0.01622 -0.01294  4.921
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -15.3076153   1.6573870  -9.236 < 0.0000000000000002
## (Intercept):2           -18.9733425   1.7056537 -11.124 < 0.0000000000000002
## (Intercept):3           -22.6630488   1.9535123 -11.601 < 0.0000000000000002
## log(pib_per_cap)          1.7610566   0.1414016  12.454 < 0.0000000000000002
## Num_sc                   -0.1396979   0.0781658  -1.787               0.0739
## Num_pl                    0.4691945   0.1002263   4.681           0.00000285
## Num_fu                   -0.8371632   0.3278786  -2.553               0.0107
## Num_chl                   0.4237167   0.1766163   2.399               0.0164
## total_ser_por_10mil_hab  -0.0010412   0.0004301  -2.421               0.0155
## Num_consor                0.1565869   0.0698177   2.243               0.0249
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## log(pib_per_cap)        ***
## Num_sc                  .  
## Num_pl                  ***
## Num_fu                  *  
## Num_chl                 *  
## total_ser_por_10mil_hab *  
## Num_consor              *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2155.195 on 4712 degrees of freedom
## 
## Log-likelihood: -1077.598 on 4712 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.8185821               0.8696209               1.5987059 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.4329370               1.5276287               0.9989593 
##              Num_consor 
##               1.1695124

Centro-Oeste

  • 418 casos
centro_oeste <- capacities_4 %>% 
  filter(regiao == "5 - Centro-Oeste")

olr_centro_oeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_centro_oeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440  1.03456  3.571
## logitlink(P[Y>=3])  -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4])  -0.2412 -0.02037 -0.01622 -0.01294  4.921
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -15.3076153   1.6573870  -9.236 < 0.0000000000000002
## (Intercept):2           -18.9733425   1.7056537 -11.124 < 0.0000000000000002
## (Intercept):3           -22.6630488   1.9535123 -11.601 < 0.0000000000000002
## log(pib_per_cap)          1.7610566   0.1414016  12.454 < 0.0000000000000002
## Num_sc                   -0.1396979   0.0781658  -1.787               0.0739
## Num_pl                    0.4691945   0.1002263   4.681           0.00000285
## Num_fu                   -0.8371632   0.3278786  -2.553               0.0107
## Num_chl                   0.4237167   0.1766163   2.399               0.0164
## total_ser_por_10mil_hab  -0.0010412   0.0004301  -2.421               0.0155
## Num_consor                0.1565869   0.0698177   2.243               0.0249
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## log(pib_per_cap)        ***
## Num_sc                  .  
## Num_pl                  ***
## Num_fu                  *  
## Num_chl                 *  
## total_ser_por_10mil_hab *  
## Num_consor              *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2155.195 on 4712 degrees of freedom
## 
## Log-likelihood: -1077.598 on 4712 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.8185821               0.8696209               1.5987059 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.4329370               1.5276287               0.9989593 
##              Num_consor 
##               1.1695124

Sudeste

  • 1.407 casos
sudeste <- capacities_4 %>% 
  filter(regiao == "3 - Sudeste")

olr_sudeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sudeste, family = cumulative(parallel = T, reverse = T))

summary(olr_sudeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sudeste)
## 
## Pearson residuals:
##                         Min       1Q   Median     3Q    Max
## logitlink(P[Y>=2])   -7.287  0.05029  0.08777 0.1928 16.844
## logitlink(P[Y>=3]) -296.849 -0.26635  0.20975 0.4934  2.085
## logitlink(P[Y>=4])  -25.669 -0.59329 -0.18417 0.6732  5.626
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -22.4809234   1.8334719 -12.261 < 0.0000000000000002
## (Intercept):2           -25.1287989   1.8495494 -13.586 < 0.0000000000000002
## (Intercept):3           -27.4000968   1.8766783 -14.600 < 0.0000000000000002
## log(pib_per_cap)          2.6468561   0.1367863  19.350 < 0.0000000000000002
## Num_sc                   -0.1250698   0.0681119  -1.836             0.066322
## Num_pl                   -0.1268220   0.0962357  -1.318             0.187562
## Num_fu                    0.3821387   0.4467468   0.855             0.392340
## Num_chl                   0.6618718   0.1780032   3.718             0.000201
## total_ser_por_10mil_hab  -0.0024410   0.0004241  -5.756     0.00000000860858
## Num_consor               -0.6480825   0.0930479  -6.965     0.00000000000328
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## log(pib_per_cap)        ***
## Num_sc                  .  
## Num_pl                     
## Num_fu                     
## Num_chl                 ***
## total_ser_por_10mil_hab ***
## Num_consor              ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2668.3 on 4211 degrees of freedom
## 
## Log-likelihood: -1334.15 on 4211 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              14.1096099               0.8824353               0.8808905 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               1.4654154               1.9384173               0.9975619 
##              Num_consor 
##               0.5230478

Sul

  • 1.077 casos
sul <- capacities_4 %>% 
  filter(regiao == "4 - Sul")

olr_sul <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sul, family = cumulative(parallel = T, reverse = T))

summary(olr_sul)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sul)
## 
## Pearson residuals:
##                        Min       1Q  Median      3Q    Max
## logitlink(P[Y>=2]) -10.246  0.03047 0.04609 0.06672 0.5401
## logitlink(P[Y>=3]) -18.162  0.12385 0.20622 0.41389 1.0257
## logitlink(P[Y>=4])  -8.533 -0.81938 0.20442 0.78411 3.0945
## 
## Coefficients: 
##                            Estimate  Std. Error z value             Pr(>|z|)
## (Intercept):1           -19.5138738   2.6226197  -7.441      0.0000000000001
## (Intercept):2           -22.8895114   2.5933103  -8.826 < 0.0000000000000002
## (Intercept):3           -25.3453916   2.6153290  -9.691 < 0.0000000000000002
## log(pib_per_cap)          2.6543825   0.1981137  13.398 < 0.0000000000000002
## Num_sc                   -0.2585624   0.0691492  -3.739             0.000185
## Num_pl                    0.0732197   0.1170027   0.626             0.531450
## Num_fu                   -0.3294161   0.5543246  -0.594             0.552334
## Num_chl                   0.0566288   0.2136118   0.265             0.790931
## total_ser_por_10mil_hab  -0.0014970   0.0006309  -2.373             0.017661
## Num_consor                0.1601353   0.0912997   1.754             0.079439
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## log(pib_per_cap)        ***
## Num_sc                  ***
## Num_pl                     
## Num_fu                     
## Num_chl                    
## total_ser_por_10mil_hab *  
## Num_consor              .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 1829.168 on 3221 degrees of freedom
## 
## Log-likelihood: -914.5841 on 3221 degrees of freedom
## 
## Number of Fisher scoring iterations: 5 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              14.2162048               0.7721609               1.0759669 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.7193436               1.0582629               0.9985041 
##              Num_consor 
##               1.1736696

06. Mapas

Carregar dados e thema

shape_mun <- geobr::read_municipality(simplified = T, showProgress = F)
shape_estado <- geobr::read_state(simplified = T, showProgress = F)

map <- shape_mun %>% 
  select(cod_mun = code_muni, geom) %>% 
  mutate(cod_mun = as.character(cod_mun)) %>% 
  left_join(capacities_4)

theme_map <- function(){
        theme(legend.position = c(0.4, 0.5), 
        legend.justification = c(1, 1),
        legend.background = element_blank(),
        plot.title=element_text( hjust=0, vjust=-5, face='bold'))
}        

Secretarias

map_sc <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Sc_class)), color = NA)+
  scale_fill_viridis_d(name = "Secretarias", option = "D",
                       na.value = "gray40",
                       labels = c("Possui 3",
                                  "Possui 2",
                                  "Possui 1",
                                  "Não possui",
                                  "Não analisados\nAcima de 50.000hab."))+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map()+
  ggtitle("Secretarias exclusivas")

Planos

map_pl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Pl_class)), color = NA)+
  scale_fill_viridis_d(name = "Planos", option = "D",
                       na.value = "gray40",
                       labels = c("Possui 3",
                                  "Possui 2",
                                  "Possui 1",
                                  "Não possui",
                                  "Não analisados\nAcima de 50.000hab."))+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map()+
  ggtitle("Planos")

Fundos

map_fu <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Fu_class)), color = NA)+
  scale_fill_viridis_d(name = "Fundos", option = "D",
                       na.value = "gray40",
                       labels = c("Possui 3",
                                  "Possui 2",
                                  "Possui 1",
                                  "Não possui",
                                  "Não analisados\nAcima de 50.000hab."))+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map()+
  ggtitle("Fundos")

Conselhos

map_chl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Chl_class)), color = NA)+
  scale_fill_viridis_d(name = "Conselhos", option = "D",
                       na.value = "gray40",
                       labels = c("Possui 3",
                                  "Possui 2",
                                  "Possui 1",
                                  "Não possui",
                                  "Não analisados\nAcima de 50.000hab."))+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map()+
  ggtitle("Conselhos")

Visualizar mapas

mapas <- gridExtra::grid.arrange(map_sc, map_pl, map_fu, map_chl, ncol = 2)

mapas
## TableGrob (2 x 2) "arrange": 4 grobs
##   z     cells    name           grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (1-1,2-2) arrange gtable[layout]
## 3 3 (2-2,1-1) arrange gtable[layout]
## 4 4 (2-2,2-2) arrange gtable[layout]

07. Tabelas auxiliares

Não reportadas no artigo

#